package com.zxq.ai.application.repository;

import com.zxq.ai.domain.activity.ActivityParticipantRecord;
import com.zxq.ai.domain.activity.CollectCardActivityParticipantRecord;
import com.zxq.ai.domain.enums.ActivityParticipantRecordStatus;

import java.util.List;

/**
 * 活动参与记录
 */
public interface CollectActivityParticipantRecordRepository {

    /**
     * 根据 activityId 和 userId 查询参与记录
     * @param activityId
     * @param userId  活动参与者ID
     * @return
     */
    List<CollectCardActivityParticipantRecord> queryByUserId(Long activityId, Long userId);

    /**
     * 查询用户参与记录
     * @param activityId
     * @param userId
     * @param activityParticipantRecordStatus
     * @return
     */
    List<CollectCardActivityParticipantRecord> queryByUserIdAndStatus(Long activityId, Long userId, ActivityParticipantRecordStatus activityParticipantRecordStatus);

    /**
     * 根据 activityId 和 userGroupId 查询参与记录
     * @param activityId
     * @param userGroupId
     * @return
     */
    List<CollectCardActivityParticipantRecord> queryByUserGroupId(Long activityId, Long userGroupId);

    /**
     * 添加参与记录
     * @param activityId
     * @param userId
     * @param orderId
     */
    void add(Long activityId, Long userId, String orderId);


    /**
     * 删除参与记录
     * @param recordIdList
     */
    void remove(List<Long> recordIdList);

    /**
     * 根据 activityId 和 orderId 查询参与记录
     * @param activityId
     * @param orderId
     */
    List<CollectCardActivityParticipantRecord> queryByOrderId(Long activityId, String orderId);

    /**
     * 根据 activityId 和 orderId 查询参与记录
     * @param activityId
     * @param orderIdList
     * @return
     */
    List<CollectCardActivityParticipantRecord> queryByOrderIds(Long activityId, List<String> orderIdList);


    /**
     * 将参与记录 标记为【已兑换】
     * @param redeemRecordList
     */
    void markRedeemed(List<ActivityParticipantRecord> redeemRecordList);


}
